package com.boil.util;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 
 * 抽象分页实体类。
 * 
 * @author ChenYong
 * @date 2016-09-21
 *
 */
public abstract class Page<E> {
	/** 总记录数 */
	protected long count;
	/** 总页数 */
	protected long pages;
	/** 每页的记录数，即页码 */
	protected int pageSize;
	/** 查询条件 */
	protected Map<String, Object> params;
	/** 数组查询条件 */
	protected Map<String, List<?>> paramss;
	/** 结果集 */
	protected List<E> results;
	
	// 普通初始化块
	{
		this.params = new HashMap<String, Object>();
		this.paramss = new HashMap<String, List<?>>();
		this.results = new ArrayList<E>();
	}

	/**
	 * 
	 * 设置总记录数。
	 * 
	 * @param count 总记录数
	 * 
	 */
	public abstract void setCount(long count);

	/**
	 * 
	 * 获取总记录数。
	 * 
	 * @return 总记录数
	 * 
	 */
	public long getCount() {
		return count;
	}

	/**
	 * 
	 * 获取总页数。
	 * 
	 * @return 总页数
	 * 
	 */
	public long getPages() {
		return pages;
	}

	/**
	 * 
	 * 获取页码。
	 * 
	 * @return 页码
	 * 
	 */
	public int getPageSize() {
		return pageSize;
	}

	/**
	 * 
	 * 获取开始记录数。
	 * 
	 * @return 开始记录数
	 * 
	 */
	public abstract long getStartRecords();
	
	/**
	 * 
	 * 获取结束记录数。
	 * 
	 * @return 结束记录数
	 * 
	 */
	public abstract long getEndRecords();

	/**
	 * 
	 * 获取查询条件。
	 * 
	 * @return 查询条件
	 * 
	 */
	public Map<String, Object> getParams() {
		return params;
	}

	/**
	 * 
	 * 获取数组查询条件。
	 * 
	 * @return 数组查询条件
	 * 
	 */
	public Map<String, List<?>> getParamss() {
		return paramss;
	}

	/**
	 * 
	 * 获取结果集。
	 * 
	 * @return 结果集
	 * 
	 */
	public List<E> getResults() {
		return results;
	}

	/**
	 * 
	 * 设置结果集。
	 * 
	 * @param results 结果集
	 * 
	 */
	public void setResults(List<E> results) {
		if (results == null) {
			results = new ArrayList<E>();
		}
		
		this.results = results;
	}
}